package cn.tedu.stage2.day01;

import java.util.Random;
import java.util.Scanner;

/**
 * 生成一个4位验证码(数字和字母的组合)
 * 然后输出到控制台并提示用户输入该验证码，只要用户输入正确(无论大小写都算)，
 * 就输出:验证码正确，否则输出:验证码错误
 *
 * 验证码如何生成?
 * 思路导向填空:
 * 1:要先确定生成的内容范围(列出所有可以出现的字符):
 *
 * 2:先思考如何生成其中的一个字符呢？
 *   2.1:确定怎么保存这些可以出现的字符:
 *
 *   2.2:怎么能随机抽选一个
 *
 * 3:既然可以生成一个，如何做到生成4个或更多个?
 *
 * 4:怎么在生成这些字符的过程中将他们组成一个字符串?
 *
 * 5:获取到用户输入的字符串后怎么与之比较,要利用到哪些字符串操作?
 */
public class Test06 {
    public static void main(String[] args) {
        // 调用生成验证码的静态方法
        String c = Code.codeGenerate();
        System.out.println("生成的验证码："+c);
        // 输入验证码
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();

        String c1 = c.toLowerCase();
        String s1 = s.toLowerCase();
        // 自动生成的验证码和输入的验证码进行判断
        if (c1.equals(s1)){
            System.out.println("输入正确！");
        } else {
            System.out.println("输出错误！");
        }
    }
}

class Code{
    public static String codeGenerate(){
        String str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        char[] CodeArray = str.toCharArray();
        Random random = new Random();
        int count = 0;
        StringBuilder stringBuilder = new StringBuilder();
        while(true) {
            //随机生成一个数组长度的随机数
            int index = random.nextInt(CodeArray.length);
            //将随机生成的数所对应的元素赋给字符c
            char c = CodeArray[index];
        /*StringBuilder类中 indexOf()方法 从指定的索引处开始，
        返回第一次出现的指定子字符串在该字符串中的索引。如果不存在这样的 k 值，则返回 -1。
        "加上""自动转化为字符串"*/
            if (stringBuilder.indexOf(c + "") == -1) {
                // StringBuilder类中 append(char c)方法 将 char 参数的字符串表示形式追加到此序列。
                stringBuilder.append(c);
                // 添加一次计数器自增1
                count++;
            }
            // 当count等于4时结束，随机生成四位数的验证码
            if (count == 4) {
                break;
            }
        }
        // 返回字符串
        return stringBuilder.toString();
    }
}
